import os
import csv
from xml.etree.ElementTree import parse

###################################
##### defining class "parser" #####
###################################

class parser:

    def __init__(self, x):
        self.appnumber = str(x[:-4])
        self.year = self.appnumber[2:6]
        self.xmldir = 'D:\\Data\\KIPRIS\\Family\\'+str(self.year) + '\\' + str(self.appnumber) + ".xml"
        try :
            tree = parse(self.xmldir)
            self.parse_error = 0
        except :
            self.parse_error = 1
        if self.parse_error ==0:
            tree = parse(self.xmldir)
            self.note = tree.getroot()
        else :
            self.note = None
    
    def family(self):
        if self.note != None:
            familylist = self.note.find("body").find("items").findall("patentFamilyInfo")
            for i in range(len(familylist)):
                ##### 순위 #####
                order = i+1
                ##### Applicatino Number #####
                if familylist[i].find("applicationNumber") != None:
                    ApplicationNumber = familylist[i].find("applicationNumber").text
                else :
                    ApplicationNumber=''
                ##### Country Code #####
                if familylist[i].find("countryCode") != None:
                    countryCode = familylist[i].find("countryCode").text
                else :
                    countryCode = ''

                ##### Country Name #####
                if familylist[i].find("countryName") != None:
                    CountryName = familylist[i].find("countryName").text
                else :
                    CountryName = ''
                ##### Family Kind #####
                if familylist[i].find("familyKind") != None:
                    FamilyKind = familylist[i].find("familyKind").text
                else :
                    FamilyKind = ''
                ##### Family Number #####
                if familylist[i].find("familyNumber") != None:
                    FamilyNumber = familylist[i].find("familyNumber").text
                else :
                    FamilyNumber = ''
                ##### Literature Kind #####
                if familylist[i].find("literatureKind") != None:
                    LiteratureKind = familylist[i].find("literatureKind").text
                else :
                    LiteratureKind = ''
                ##### Literature Number #####
                if familylist[i].find("literatureNumber") != None:
                    LiteratureNumber = familylist[i].find("literatureNumber").text
                else :
                    LiteratureNumber = ''
                ##### Opening Number #####
                if familylist[i].find("openingNumber") != None:
                    OpeningNumber = familylist[i].find("openingNumber").text
                else :
                    OpeningNumber = ''
                row = [str(self.appnumber), str(order), str(countryCode), str(CountryName), str(FamilyKind), str(FamilyNumber), str(LiteratureKind), str(LiteratureNumber), str(OpeningNumber)]
                wrfamily.writerow(row)
        else :
            pass

################################################################################################################################
################################################################################################################################
################################################################################################################################

errorlist = []

###################################
##### Opening Blank csv files #####
###################################

family = open('D:\\Data\\KIPRIS\\Family\\csv\\family.csv', 'w', encoding='utf-8', newline='')
wrfamily = csv.writer(family)
wrfamily.writerow(["ApplicationNumber", "order", "CountryCode", "CountryName", "FamilyKind", "FamilyNumber", "LiteratureKind", "LiteratureNumber", "OpeningNumber"])


for year in range(1948 , 2017):

    ############################
    ##### Parsing, Writing #####
    ############################

    xmllist = os.listdir('D:\\Data\\KIPRIS\\Family\\'+str(year))
    for files in xmllist:
        a = parser(files)
        if a.parse_error ==1:
            errorlist.append(a.appnumber)
        else:
            pass
        a.family()
        print(str(a.appnumber))


############################
##### Saving errorlist #####
############################

with open("D:\\Data\\KIPRIS\\Family\\csv\\errorlist.csv", "w", newline = '') as errorlist_csv:
    wr = csv.writer(errorlist_csv)
    wr.writerow(errorlist)